/*
 * Arbol.cpp
 *
 *  Created on: 28/07/2013
 *      Author: juan
 */

#include "Arbol.h"
#define SEGARBOL (15)

Arbol::Arbol(GLuint program) : Figure(program) {
	// Creo la popa, debo general el grafo de control
	srand(time(NULL)+rand());
	double defor = (rand() / (double)RAND_MAX + 1.0);
	fprintf (stderr, "%f", defor);
	vector<float> *puntosSR = new vector<float>();
	puntosSR->push_back(0.0); puntosSR->push_back(3.0);puntosSR->push_back(0.0);//Repito los primeros puntos ya que al utilizar B-Spline debo forzar el cierre de la superficie.
	puntosSR->push_back(1.0);puntosSR->push_back(2.8);puntosSR->push_back(0.0);
	puntosSR->push_back(2.0);puntosSR->push_back(1.0*defor);puntosSR->push_back(0.0);
	puntosSR->push_back(2.5*defor);puntosSR->push_back(0.0);puntosSR->push_back(0.0);
	puntosSR->push_back(2.0);puntosSR->push_back(-1.0);puntosSR->push_back(0.0);
	puntosSR->push_back(0.5);puntosSR->push_back(-2.0);puntosSR->push_back(0.0);
	puntosSR->push_back(0.0);puntosSR->push_back(-5.0);puntosSR->push_back(0.0);
	popa = new revSurf(program, puntosSR);
	//Acomodo la popa
	popa->traslate(glm::vec3(0.0f,0.0f,2.8f));
	popa->scale(glm::vec3(0.6f,0.6f,0.5f));
	popa->rotate(90,glm::vec3(1,0,0));
	tronco = new Cilinder(program, SEGARBOL);
	//Acomodo el tronco
	tronco->scale(glm::vec3(0.3f,0.3f,4.0f));
	delete (puntosSR);
}

Arbol::~Arbol() {
	delete popa;
	delete tronco;
}

void Arbol::draw(GLuint program, glm::mat4 & world_matrix) {
	//Esto me sirve para usar trasnformaciones afines desde afuera
	glm::mat4 matriz = world_matrix * this->model_matrix;
	popa->draw(program,matriz);
	tronco->draw(program,matriz);
}

void Arbol::set_texture_up(GLuint tex_popa) {
	popa->set_texture_id(tex_popa);
}

void Arbol::set_texture_down(GLuint tex_tronco) {
	tronco->set_texture_id(tex_tronco);
}

